package com.ld.poetry.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.TableField;

import java.io.Serializable;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 历史信息实体类
 * 
 * 功能说明：
 * 1. 记录网站访问历史信息
 * 2. 存储用户访问记录
 * 3. 统计访问数据
 * 
 * 使用场景：
 * 1. 网站访问统计
 * 2. 用户行为分析
 * 3. 地区访问分布
 * 
 * 注意事项：
 * 1. 数据量较大，需要定期清理
 * 2. 包含用户敏感信息，需要加密存储
 * 3. 需要合理设置索引
 * 
 * @author sara
 * @since 2023-07-24
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("history_info")
public class HistoryInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 历史记录ID
     * 
     * 功能说明：
     * 1. 唯一标识历史记录
     * 2. 自增主键
     * 
     * 数据库字段：
     * - 字段名：id
     * - 类型：INT
     * - 约束：主键，自增
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 用户ID
     * 
     * 功能说明：
     * 1. 关联访问用户
     * 2. 可为空（未登录用户）
     * 
     * 数据库字段：
     * - 字段名：user_id
     * - 类型：INT
     * - 约束：可空，外键关联用户表
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 访问IP
     * 
     * 功能说明：
     * 1. 记录访问者IP地址
     * 2. 用于统计独立访问量
     * 
     * 数据库字段：
     * - 字段名：ip
     * - 类型：VARCHAR
     * - 约束：非空
     */
    @TableField("ip")
    private String ip;

    /**
     * 国家
     * 
     * 功能说明：
     * 1. 记录访问者所在国家
     * 2. 用于地区访问统计
     * 
     * 数据库字段：
     * - 字段名：nation
     * - 类型：VARCHAR
     * - 约束：可空
     */
    @TableField("nation")
    private String nation;

    /**
     * 省份
     * 
     * 功能说明：
     * 1. 记录访问者所在省份
     * 2. 用于地区访问统计
     * 
     * 数据库字段：
     * - 字段名：province
     * - 类型：VARCHAR
     * - 约束：可空
     */
    @TableField("province")
    private String province;

    /**
     * 城市
     * 
     * 功能说明：
     * 1. 记录访问者所在城市
     * 2. 用于地区访问统计
     * 
     * 数据库字段：
     * - 字段名：city
     * - 类型：VARCHAR
     * - 约束：可空
     */
    @TableField("city")
    private String city;

    /**
     * 创建时间
     * 
     * 功能说明：
     * 1. 记录访问时间
     * 2. 用于时间维度统计
     * 
     * 数据库字段：
     * - 字段名：create_time
     * - 类型：DATETIME
     * - 约束：非空，默认当前时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;
}
